iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0

列表推導式(List Comprehensions)是 Python 中的一種簡潔且強大的語法,用於從一個可迭代對象(如列表、元組、字典、集合等)生成新的列表。它能夠在一行代碼中表達迴圈和條件語句,讓代碼更加簡潔明了。

  • 列表推導式基本語法如下:
[expression for item in iterable if condition]

expression:對item的處理(可以是原樣返回、函數調用、或運算)。
for item in iterable:遍歷一個可迭代對象(如列表)。
if condition:可選,用來篩選符合條件的item

壹、基本範例

使用列表推導式創建一個新的列表,該列表由現有列表中的每個元素加倍後得到:

numbers = [1, 2, 3, 4, 5]
doubled_numbers = [x * 2 for x in numbers]
print(doubled_numbers)  # 輸出: [2, 4, 6, 8, 10]

貳、帶條件的列表推導式

你還可以在列表推導式中添加條件語句,用於篩選元素。

  • 從列表中只提取偶數,並將其平方:
numbers = [1, 2, 3, 4, 5, 6]
squared_even_numbers = [x**2 for x in numbers if x % 2 == 0]
print(squared_even_numbers)  # 輸出: [4, 16, 36]

參、嵌套的列表推導式

列表推導式還可以嵌套,用於生成更複雜的數據結構。下面的例子展示了如何創建一個 2x2 的矩陣:

matrix = [[row * col for col in range(1, 3)] for row in range(1, 3)]
print(matrix)  # 輸出: [[1, 2], [2, 4]]

肆、多個迴圈的列表推導式

當有多個迴圈時,列表推導式也可以在一行中處理。以下範例會生成所有可能的(x, y)組合,x來自[1, 2, 3]y來自[4, 5, 6]

combinations = [(x, y) for x in [1, 2, 3] for y in [4, 5, 6]]
print(combinations)  # 輸出: [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

伍、列表推導式與條件運算符

除了if語句過濾外,還可以在expression中使用條件運算符來處理不同情況。例如,對一個列表中的偶數進行平方,奇數不變:

numbers = [1, 2, 3, 4, 5]
result = [x**2 if x % 2 == 0 else x for x in numbers]
print(result)  # 輸出: [1, 4, 3, 16, 5]

陸、列表推導式生成器與性能

列表推導式通常比傳統的 for 迴圈更加高效,因為它在底層進行了優化。不過,當涉及大量數據時,生成器表達式(Generator Expressions)會是一個更好的選擇,它不會一次性將所有結果存儲在內存中,而是以懶加載的方式生成結果。

# 使用括號生成一個生成器而不是列表
numbers = [1, 2, 3, 4, 5]
generator = (x * 2 for x in numbers)
print(list(generator))  # 輸出: [2, 4, 6, 8, 10]

柒、列表推導式vs for迴圈

以下是一個傳統for迴圈的示例,與對應的列表推導式對比:

# 傳統的for迴圈方式
squares = []
for x in range(1, 6):
    squares.append(x**2)
print(squares)  # 輸出: [1, 4, 9, 16, 25]

# 使用列表推導式
squares = [x**2 for x in range(1, 6)]
print(squares)  # 輸出: [1, 4, 9, 16, 25]

上一篇
第12天:文件讀寫
系列文
python30天入門學習13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言